/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager.editar;

import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.entidade.localidade.Endereco;
import br.com.deployment.servico.CidadeServico;
import br.com.deployment.servico.PessoaServico;
import br.com.deployment.util.Caracteres;
import br.com.deployment.utilitario.*;
import java.io.IOException;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author elyjr
 */
@ManagedBean
@SessionScoped
public class ManagerEditarPessoa implements Serializable {

    @EJB
    PessoaServico pessoaServico;
    
    @EJB
    CidadeServico cidadeServico;
    
    private Pessoa pessoa;
    private Endereco endereco;
   
    private boolean exibe = Boolean.TRUE, exibeCnpj = Boolean.TRUE;

    public ManagerEditarPessoa() {
         
         
    }

    public void atualizar() {
        if (endereco.getCidade() != null) {
            endereco.setCidade(cidadeServico.find(endereco.getCidade().getCod_cidade()));
            endereco.setEstado(endereco.getCidade().getCod_estado());
            pessoa.setEndereco(endereco);
        }
        endereco.setCelular(Caracteres.removecaracter(endereco.getCelular()));
        endereco.setTelefone(Caracteres.removecaracter(endereco.getTelefone()));
        endereco.setCep(Caracteres.removecaracter(endereco.getCep()));
        pessoa.setEndereco(endereco);
        pessoaServico.atualizar(pessoa);
    }

    public void redirect(String string, Pessoa p) {
        try {
            FacesContext context = FacesContext.getCurrentInstance();
           
            pessoa = p;
            endereco = pessoa.getEndereco();
            verificaTipoPessoa();
            context.getExternalContext().redirect(string);
        } catch (IOException ex) {
            Logger.getLogger(ManagerEditarPessoa.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void verificaTipoPessoa() {
        if (pessoa.getTipo() == TipoPessoa.Fisica) {
            setExibe(true);
            setExibeCnpj(false);
        } else {
            setExibe(false);
            setExibeCnpj(true);
        }
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public boolean isExibe() {
        return exibe;
    }

    public void setExibe(boolean exibe) {
        this.exibe = exibe;
    }

    public boolean isExibeCnpj() {
        return exibeCnpj;
    }

    public void setExibeCnpj(boolean exibeCnpj) {
        this.exibeCnpj = exibeCnpj;
    } 
    
    // SelectItem de Utilitários
    
    public SelectItem[] selectItemSexo() {
        SelectItem[] items = new SelectItem[Sexo.values().length];
        int i = 0;
        for (Sexo sexo : Sexo.values()) {
            items[i++] = new SelectItem(sexo);
        }
        return items;
    }
    
    public SelectItem[] selectItemEstadoCivil() {
        SelectItem[] items = new SelectItem[EstadoCivil.values().length];
        int i = 0;
        for (EstadoCivil estadoCivil : EstadoCivil.values()) {
            items[i++] = new SelectItem(estadoCivil);
        }
        return items;
    }

    public SelectItem[] selectItemTipoEndereco() {
        SelectItem[] items = new SelectItem[TipoEndereco.values().length];
        int i = 0;
        for (TipoEndereco tipo : TipoEndereco.values()) {
            items[i++] = new SelectItem(tipo);
        }
        return items;
    }

    public SelectItem[] selectItemTipoLogradouro() {
        SelectItem[] items = new SelectItem[TipoLogradouro.values().length];
        int i = 0;
        for (TipoLogradouro tipo : TipoLogradouro.values()) {
            items[i++] = new SelectItem(tipo);
        }
        return items;
    }
    
    
}
